import com.niit.mybatis_homework1.dao.OrderDao;
import com.niit.mybatis_homework1.entity.Orders;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;

import java.io.InputStream;

 public class Mybatistest {

    /**
     * 基于xml配置方式的 mybatis入门程序案例测试
     * 使用SqlSession对象的原始用法
     *
     */
    @Test
    public void test01() {
        // 1. 读取配置文件
        InputStream inputStream = Mybatistest.class.getResourceAsStream("/mybatis-config.xml");
        // 2. 创建 SqlSessionFactory 对象
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 创建 SqlSession 对象
        try (SqlSession sqlSession = sessionFactory.openSession()) {
            // 4. 根据 ID 查询数据
            Orders orders = sqlSession.selectOne("queryById", "szfd");
            System.out.println(orders);
            sqlSession.commit(); // 提交事务
        }
        // 6. 关闭 SqlSession 对象
    }


    /**
     * 基于xml配置方式的 mybatis入门程序案例测试
     * 使用接口映射的代理对象,将sql映射到接口方法上
     *
     * @throws Exception
     */
    @Test
    public void test02() throws Exception {
        // 1. 读取配置文件
        InputStream inputStream = Mybatistest.class.getResourceAsStream("/mybatis-config.xml");
        // 2. 创建 SqlSessionFactory 对象
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 创建 SqlSession 对象
        SqlSession sqlSession = sessionFactory.openSession();
        try {
            // 4. 获取 Mapper 接口代理对象
            OrderDao ordersDao = sqlSession.getMapper(OrderDao.class);
            // 5. 根据 ID 查询数据
            Orders orders = ordersDao.queryById("wo");
            System.out.println(orders);
            sqlSession.commit(); // 提交事务
        } finally {
            // 6. 关闭 SqlSession 对象
            sqlSession.close();
        }
    }
}

